1
Introduzione a PyTorch: perché i tensori contano
EvoClass-AI002Lezione 1
00:00

Introduzione a PyTorch: perché i tensori contano

PyTorch è un framework open source altamente flessibile e dinamico apprezzato per la ricerca in ambito deep learning e lo sviluppo rapido di prototipi. Al suo centro si trova il tensore che rappresenta la struttura dati fondamentale. Si tratta di un array multidimensionale progettato per gestire in modo efficiente le operazioni numeriche richieste dai modelli di deep learning, supportando automaticamenteaccelerazione GPU automaticamente.

1. Comprendere la struttura del tensore

Ogni input, output e parametro del modello in PyTorch è racchiuso in un tensore. Svolgono lo stesso ruolo degli array NumPy ma sono ottimizzati per l'elaborazione su hardware specializzato comeGPU, rendendoli molto più efficienti per le operazioni di algebra lineare su larga scala richieste dai reti neurali.

Proprietà chiave che definiscono il tensore:

  • Forma: Definisce le dimensioni dei dati, espressa come una tupla (ad esempio, $4 \times 32 \times 32$ per un batch di immagini).
  • Tipo: Specifica il tipo numerico degli elementi memorizzati (ad esempio,torch.float32 per i pesi del modello,torch.int64 per l'indicizzazione).
  • Dispositivo: Indica la posizione fisica dell'hardware: tipicamente'cpu' o'cuda' (GPU NVIDIA).
Grafico dinamico e Autograd
PyTorch utilizza un modello di esecuzione imperativo, il che significa che il grafico computazionale viene costruito durante l'esecuzione delle operazioni. Questo permette al motore integrato di differenziazione automatica,Autograd, di tenere traccia di ogni operazione su un tensore, purché la proprietàrequires_grad=True sia impostata, consentendo un calcolo semplice dei gradienti durante la retropropagazione.
fundamentals.py
TERMINALEbash — ambiente-pytorch
> Pronto. Clicca su "Esegui" per eseguire.
>
ISPEZIONE TENSORIIn diretta

Esegui il codice per ispezionare i tensori attivi
Domanda 1
Quale comando crea un tensore $5 \times 5$ contenente numeri casuali distribuiti uniformemente tra 0 e 1?
torch.rand(5, 5)
torch.random(5, 5)
torch.uniform(5, 5)
torch.randn(5, 5)
Domanda 2
Se il tensore $A$ è sulla CPU e il tensore $B$ è sul dispositivo CUDA, cosa succede se provi a calcolare $A + B$?
Si verifica un errore perché le operazioni richiedono tensori sullo stesso dispositivo.
PyTorch sposta automaticamente $A$ sul dispositivo CUDA e procede.
L'operazione viene eseguita sulla CPU e il risultato viene restituito alla CPU.
Domanda 3
Qual è il tipo di dato (dtype) più comune usato per i pesi del modello e per i calcoli intermedi nel deep learning?
torch.float32 (punto flottante a precisione singola)
torch.int64 (intero lungo)
torch.bool
torch.float64 (punto flottante a precisione doppia)
Sfida: Manipolazione di tensori e forma
Prepara un tensore per un'operazione matriciale specifica.
Hai un vettore caratteristica $F$ di forma $(10,)$. Devi moltiplicarlo per una matrice di pesi $W$ di forma $(10, 5)$. Perché la moltiplicazione matriciale (MatMul) funzioni, $F$ deve essere bidimensionale.
Passo 1
Qual dovrebbe essere la forma di $F$ prima della moltiplicazione con $W$?
Soluzione:
Le dimensioni interne devono corrispondere, quindi $F$ deve essere $(1, 10)$. Poi $(1, 10) @ (10, 5) \rightarrow (1, 5)$.
Codice: F_new = F.unsqueeze(0) oF_new = F.view(1, -1)
Passo 2
Esegui la moltiplicazione matriciale tra $F_{new}$ e $W$ (forma $(10, 5)$).
Soluzione:
L'operazione è una moltiplicazione matriciale semplice.
Codice: output = F_new @ W ooutput = torch.matmul(F_new, W)
Passo 3
Quale metodo restituisce esplicitamente un tensore con le dimensioni specificate, consentendoti di ripristinare il tensore a forma $(50,)$? (Supponi che $F$ fosse inizialmente $(5, 10)$ e ora sia piatto.)
Soluzione:
Usa il metodoview oreshape metodi. Il modo più veloce per piattare è spesso usare-1per una dimensione.
Codice: F_flat = F.view(-1) oF_flat = F.reshape(50)